Move common gdkwindow.c code into function gdk_window_drop_cairo_surface
authorAlexander Larsson <alexl@redhat.com>
Tue, 19 Jan 2010 15:36:49 +0000 (16:36 +0100)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Sun, 4 Apr 2010 00:55:22 +0000 (20:55 -0400)
This code is duplicated in several places, and more to come, so put
it all in one place.

gdk/gdkwindow.c

index 5b39995f9e2f2dada4dd79bb3b73cf69fa90b549..b05d5fa19d032a45d3a0fffe71bab5a8bd17bb8f 100644 (file)
@@ -276,6 +276,7 @@ static cairo_surface_t *gdk_window_ref_cairo_surface (GdkDrawable *drawable);
 static cairo_surface_t *gdk_window_create_cairo_surface (GdkDrawable *drawable,
                                                         int width,
                                                         int height);
+static void             gdk_window_drop_cairo_surface (GdkWindowObject *private);
 static void             gdk_window_set_cairo_clip    (GdkDrawable *drawable,
                                                      cairo_t *cr);
 
@@ -1596,14 +1597,9 @@ gdk_window_reparent (GdkWindow *window,
   if (is_parent_of (window, new_parent))
     return;
 
-  if (private->cairo_surface)
-    {
-      /* This might be wrong in the new parent, e.g. for non-native surfaces.
-        To make sure we're ok, just wipe it. */
-      cairo_surface_finish (private->cairo_surface);
-      cairo_surface_set_user_data (private->cairo_surface, &gdk_window_cairo_key,
-                                  NULL, NULL);
-    }
+  /* This might be wrong in the new parent, e.g. for non-native surfaces.
+     To make sure we're ok, just wipe it. */
+  gdk_window_drop_cairo_surface (private);
 
   impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
   old_parent = private->parent;
@@ -2063,13 +2059,7 @@ _gdk_window_destroy_hierarchy (GdkWindow *window,
 
          _gdk_window_clear_update_area (window);
 
-         if (private->cairo_surface)
-           {
-             cairo_surface_finish (private->cairo_surface);
-             cairo_surface_set_user_data (private->cairo_surface, &gdk_window_cairo_key,
-                                          NULL, NULL);
-           }
-
+         gdk_window_drop_cairo_surface (private);
 
          impl_iface = GDK_WINDOW_IMPL_GET_IFACE (private->impl);
 
@@ -4843,6 +4833,17 @@ gdk_window_copy_to_image (GdkDrawable     *drawable,
                                     width, height);
 }
 
+static void
+gdk_window_drop_cairo_surface (GdkWindowObject *private)
+{
+  if (private->cairo_surface)
+    {
+      cairo_surface_finish (private->cairo_surface);
+      cairo_surface_set_user_data (private->cairo_surface, &gdk_window_cairo_key,
+                                  NULL, NULL);
+    }
+}
+
 static void
 gdk_window_cairo_surface_destroy (void *data)
 {